package main

import "fmt"

func grayCode(n int) []int{
	res :=make([]int,1<<n)
	for i:=range res {
		//i>>1 位运算，右移，一个或多个零数位从左被推入。2：010 经过右移1为  01再异或一个2：10    01：10：11=3
		//按位异或XOR（^），1^1=0、1^0=1、0^1=1、0^0=1
		res[i]=(i>>1)^i
	}
	return res
}


func main(){
	fmt.Println(grayCode(2))

}